<?php
// +----------------------------------------------------------------------
// | 幕小铺
// +----------------------------------------------------------------------
// | 版权所有 2016~2020 幕小铺科技（大连）有限公司
// +----------------------------------------------------------------------
// | 2020/06/02
// +----------------------------------------------------------------------

namespace app\erp\admin;

use app\admin\controller\Admin;
use app\erp\model\ErpGoods;
use think\Db;
use app\common\builder\ZBuilder;
use util\Tree;
use function GuzzleHttp\Psr7\str;

/**
 * 优惠券管理
 * @author dou <51779987@qq.com>
 * @package app\cms\admin
 */
class Coupon extends Admin
{
    /**
     * 首页
     * @author  dou<51779987@qq.com>
     * @return mixed
     */
    public function index()
    {
        cookie('__forward__', $_SERVER['REQUEST_URI']);
        //获取筛选
        $map = $this->getMap();
        //数据获取
        $data = input();
        //数据列表
        $data_list = model('ErpCoupon', 'model')-> where($map)-> order('create_time desc')-> paginate();

        //整理数据
        if($data_list){
            foreach ($data_list as $key =>$value){
                $map = [
                    ['coupon_id','=',$value['id']],
                ];
                $data_list[$key]['coupon_sum_get'] = model('ErpCouponUseinfo', 'model')->where($map)->where('coupon_user','>',0)->count();//已领取数量
                $data_list[$key]['coupon_sum_unget'] = intval($value['coupon_sum'] - $data_list[$key]['coupon_sum_get']);//未领取数量
                $data_list[$key]['coupon_sum_use'] = model('ErpCouponUseinfo', 'model')->where($map)->where('coupon_use_type','=',2)->count();//已使用数量
                $data_list[$key]['coupon_sum_dis'] = model('ErpCouponUseinfo', 'model')->where($map)->where('coupon_use_type','=',4)->count();//不可用数量
            }
        }else{}
        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle('优惠券管理') // 设置页面标题
            ->setPrimaryKey('id') // 设置主键名为id
            ->setTableName('erp_coupon') // 设置数据表名
            ->addColumns([ // 批量添加列
                // ['__INDEX__', '序号'],
                ['id', '优惠券ID'],
                ['coupon_name', '优惠券名称', 'text.edit'],
                ['coupon_value', '优惠券价值', 'text.edit'],
                ['coupon_period_stime', '有效开始时间','datetime'],
                ['coupon_period_etime', '有效截止时间','datetime'],
                ['coupon_sum', '生成数量'],
                ['coupon_sum_get', '已领取数量'],
                ['coupon_sum_unget', '未领数量'],
                ['coupon_sum_use', '已使用数量'],
                ['coupon_sum_dis', '不可用数量'],
                ['create_time', '创建时间', 'datetime','datetime'],
                ['coupon_isuse', '是否可用', 'switch', '0', ['color' => 'danger']],
                ['right_button', '操作', 'btn']
            ])
			->setSearchArea([
				['text', 'id', '优惠券ID'],
                ['text', 'coupon_name', '优惠券名称', 'like'],
				['daterange', 'create_time', '创建时间'],
            ])
            // ->setSearch(['id' => '优惠券ID', 'title' => '优惠券名称', 'code' => '优惠券编码']) // 设置搜索参数
            ->addTopButton('add', '', ['area' => ['50%', '80%']]) // 添加授权按钮
            ->addRightButton('edit', '', ['area' => ['50%', '80%']]) // 批量添加右侧按钮
            ->addRightButton('custom', ['title' => '优惠券使用列表', 'href' => url('erp/coupon/useinfo', ['coupon_id' => '__id__'])],true)
            ->setRowList($data_list) // 设置表格数据
            ->fetch(); // 渲染页面

    }

    /**
     * 添加
     * @author  dou<51779987@qq.com>
     * @return mixed
     * @throws \think\Exception
     */
    public function add(){
        // 保存数据
        if ($this->request->isPost()) {
            //数据接收
            $data = $this->request->post();
            $user_id                    = intval(isset($data['user_id']) ? $data['user_id'] : 1);
            $coupon_name                = strval(isset($data['coupon_name']) ? $data['coupon_name'] : '');
            $coupon_sum                 = intval(isset($data['coupon_sum']) ? $data['coupon_sum'] : 0);
            $coupon_period              = intval(isset($data['coupon_period']) ? $data['coupon_period'] : 0);
            $coupon_period_stime        = intval(isset($data['coupon_period_stime']) ? strtotime($data['coupon_period_stime']) : '');
            $coupon_period_etime        = intval(isset($data['coupon_period_etime']) ? strtotime($data['coupon_period_etime']) : '');
/*            $coupon_rule  		        = intval(isset($data['coupon_rule']) ? $data['coupon_rule'] : 0);
            $coupon_rule_type_arr       = ($coupon_rule == 1) ? $data['coupon_rule_type_sd'] : $data['coupon_rule_type_zd'];
            $coupon_rule_type           = $data['coupon_rule_type'] = strval(implode(',',$coupon_rule_type_arr));*/
            $coupon_source  		    = intval(isset($data['coupon_source']) ? $data['coupon_source'] : 0);
            $coupon_type  	            = intval(isset($data['coupon_type']) ? $data['coupon_type'] : 0);
            $coupon_value=$data['coupon_value']= strval($coupon_type == 2 ? $data['coupon_value_per'] : $data['coupon_value_int']);
            $coupon_attribute  		    = intval(isset($data['coupon_attribute']) ? $data['coupon_attribute'] : 0);
            $coupon_attribute_num  		= intval(isset($data['coupon_attribute_num']) ? $data['coupon_attribute_num'] : 0);
            $coupon_use_scope  		    = intval(isset($data['coupon_use_scope']) ? $data['coupon_use_scope'] : 0);
            $coupon_use_scope_info      = '';
            //类别
            if(isset($data['lei_array_id']) && !empty($data['lei_array_id'])){
                $coupon_use_scope_info  		= strval(isset($data['lei_array_id']) ? implode(',',$data['lei_array_id']) : '');
            }else{}
            //品牌
            if(isset($data['goods_array_id']) && !empty($data['goods_array_id'])){
                $coupon_use_scope_info  		= strval(isset($data['goods_array_id']) ? implode(',',$data['goods_array_id']) : '');
            }else{}
            $coupon_use_condition  		= intval(isset($data['coupon_use_condition']) ? $data['coupon_use_condition'] : 0);
            $coupon_use_condition_num   = intval(isset($data['coupon_use_condition_num']) ? $data['coupon_use_condition_num'] : 0);
            $coupon_isuse  		        = intval(isset($data['coupon_isuse']) ? $data['coupon_isuse'] : 0);
            $coupon_claim_status  		= intval(isset($data['coupon_claim_status']) ? $data['coupon_claim_status'] : 0);

            //数据验证
            $Validate = validate('Coupon', 'validate');
            if( !$Validate -> scene('coupon_add') -> check($data) ){
                $this->error($Validate -> getError());
            }else{}
            //验证时间
            if($coupon_period_etime <= $coupon_period_stime && $coupon_period>0){
                $this->error('有效日期的截止时间必须大于开始时间');
            }else{}
            if($coupon_use_scope == 1 && empty($coupon_use_scope_info)){
                $this->error('允许使用类别不能为空');
            }elseif ($coupon_use_scope == 2 && empty($coupon_use_scope_info)){
                $this->error('允许使用品牌不能为空');
            }else{}
            if($coupon_use_condition > 0 && empty($coupon_use_condition_num)){
                $this->error('允许使用详细条件不能为空');
            }else{}
            if($coupon_attribute_num < 1 && $coupon_attribute > 0){
            $this->error('可重复使用数必须大于0');
            }else{}
            $rel = controller('Couponlogic','logic') -> add($user_id, $coupon_name, $coupon_value, $coupon_claim_status, $coupon_type, $coupon_source,$coupon_period, $coupon_period_stime, $coupon_period_etime, $coupon_sum, $coupon_attribute, $coupon_attribute_num, $coupon_use_condition, $coupon_use_condition_num, $coupon_use_scope, $coupon_use_scope_info,$coupon_isuse);

            if($rel['code'] == 200){
                $this->success('新增成功', '', '_parent_reload');
            }else{
                $this->error($rel['message']);
            }

        }

        // 使用ZBuilder快速创建表单
        $goods_info = ErpGoods::column('id,goods_name');
        //$user_info = model('user_center/Member', 'model\user')  -> column('uid,nick_name');
        //分类-查找
        $class_info = [];
        $class_infos = model('ErpGoodsClass', 'model') -> getClass();
        foreach($class_infos as $key => $value){
            $class_info[$value['id']] = $value['title_display'];
        }
        $trigger = [
            ['coupon_use_scope', '1', 'lei_array_id'],
            ['coupon_use_scope', '2', 'goods_array_id'],
            ['coupon_use_condition', '1', 'coupon_use_condition_num'],
            ['coupon_type', '1', 'coupon_value_int'],
            ['coupon_type', '2', 'coupon_value_per'],
            ['coupon_period', '1', 'coupon_period_stime,coupon_period_etime'],
            ['coupon_attribute', '1', 'coupon_attribute_num'],
           /* ['coupon_rule', '0', 'coupon_rule_type_zd'],
            ['coupon_rule', '1', 'coupon_rule_type_sd'],*/
        ];
        return ZBuilder::make('form')
            ->setPageTitle('新增优惠券') // 设置页面标题
            ->addFormItems([ // 批量添加表单项
                ['text', 'coupon_name', '优惠券名称','必填'],
                ['number', 'coupon_sum', '发放数量', '优惠券发放数量：整数且大于0', '1', '1'],
            ])
            ->addRadio('coupon_period', '是否有效期', '有效期',config('coupon_period'),0)
            ->addDaterange('coupon_period_stime,coupon_period_etime', '有效日期范围', '优惠券只可在该日期范围内使用', date('Y-m-d H:i:s',time()))
            ->addRadio('coupon_type', '优惠券类型', '优惠券使用条件：限定允许使用的场景',config('coupon_type'),1)
            ->addText('coupon_value_int', '优惠券价值','优惠券价值：整数(例如：10)')
            ->addText('coupon_value_per', '优惠券价值','优惠券价值：百分比(例如：10%)')
            ->addRadio('coupon_use_scope', '使用范围', '优惠券使用范围：限定该优惠券允许使用的范围', config('coupon_use_scope'),0)
            ->addSelect('lei_array_id', '选择允许使用类别' , '类别:网站上架并销售的物品所属类别' , $class_info , '' , 'multiple')
            ->addSelect('goods_array_id', '选择允许使用商品' , '商品：网站上架并进行销售的指定物品' , $goods_info , '' , 'multiple')
            ->addRadio('coupon_use_condition', '使用条件', '折扣券使用条件：限定允许使用的场景', config('coupon_use_condition'),0)
            ->addText('coupon_use_condition_num', '使用详细条件')
           /* ->addRadio('coupon_rule', '发放规则','优惠券发放规则：客户获取优惠券方式',config('coupon_rule'),0)
            ->addCheckbox('coupon_rule_type_zd', '自动发放规则','',config('coupon_rule_type_zd'),0)
            ->addCheckbox('coupon_rule_type_sd', '手动发放规则','',config('coupon_rule_type_sd'),0)*/
            ->addRadio('coupon_source', '来源','优惠券发放来源：客户获取优惠券来源',config('coupon_source'),1)
            ->addRadio('coupon_attribute', '使用属性','优惠券使用属性：规范客户可以领取并使用的次数',config('coupon_attribute'),
                0)
            ->addText('coupon_attribute_num', '可使用次数','优惠券使用次数：规范客户可以领取并使用的次数')
            ->setTrigger($trigger)
            ->addRadio('coupon_isuse', '是否可用','当优惠券不可用时不允许进行订单支付使用',['不可用','可用'],0)
            ->fetch();
    }

    /**
     * 编辑
     * @param null $id 优惠券id
     * @author dou <51779987@qq.com>
     * @return mixed
     * @throws \think\Exception
     */
    public function edit($id = null)
    {
        if ($id === null) $this->error('缺少参数');
        // 保存数据
        if ($this->request->isPost()) {
            //数据接收
            $data = $this->request->post();
            $data['id'] = $id;
            $user_id                    = intval(isset($data['$user_id']) ? $data['$user_id'] : 1);
            $coupon_name                = strval(isset($data['coupon_name']) ? $data['coupon_name'] : '');
            $coupon_value_per  	        = strval(isset($data['coupon_value_per']) ? $data['coupon_value_per'] : '');
            $coupon_value_int  	        = strval(isset($data['coupon_value_int']) ? $data['coupon_value_int'] : '');
            $coupon_sum                 = intval(isset($data['coupon_sum']) ? $data['coupon_sum'] : 0);
            $coupon_period              = intval(isset($data['coupon_period']) ? $data['coupon_period'] : 0);
            if($coupon_period == 0){
                $data['coupon_period_stime']        = 0;
                $data['coupon_period_etime']        = 0;
            }else{}
            $coupon_period_stime        = intval(isset($data['coupon_period_stime']) ? strtotime($data['coupon_period_stime']) : '');
            $coupon_period_etime        = intval(isset($data['coupon_period_etime']) ? strtotime($data['coupon_period_etime']) : '');
           /* $coupon_rule  		        = intval(isset($data['coupon_rule']) ? $data['coupon_rule'] : 0);
            $coupon_rule_type_arr       = ($coupon_rule == 1) ? $data['coupon_rule_type_sd'] : $data['coupon_rule_type_zd'];
            $coupon_rule_type           = $data['coupon_rule_type'] = strval(implode(',',$coupon_rule_type_arr));*/
            $coupon_source  		    = intval(isset($data['coupon_source']) ? $data['coupon_source'] : 0);
            $coupon_type  	            = intval(isset($data['coupon_type']) ? $data['coupon_type'] : 0);
            $coupon_value=$data['coupon_value']= strval($coupon_type == 2 ? $coupon_value_per : $coupon_value_int);
            $coupon_attribute  		    = intval(isset($data['coupon_attribute']) ? $data['coupon_attribute'] : 0);
            $coupon_attribute_num  		= intval(isset($data['coupon_attribute_num']) ? $data['coupon_attribute_num'] : 0);
            $coupon_use_scope  		    = intval(isset($data['coupon_use_scope']) ? $data['coupon_use_scope'] : 0);
            $coupon_use_scope_info      = '';
            //类别
            if(isset($data['lei_array_id']) && !empty($data['lei_array_id'])){
                $coupon_use_scope_info  		= strval(isset($data['lei_array_id']) ? implode(',',$data['lei_array_id']) : '');
            }else{}
            //品牌
            if(isset($data['goods_array_id']) && !empty($data['goods_array_id'])){
                $coupon_use_scope_info  		= strval(isset($data['goods_array_id']) ? implode(',',$data['goods_array_id']) : '');
            }else{}
            $coupon_use_condition  		= intval(isset($data['coupon_use_condition']) ? $data['coupon_use_condition'] : 0);
            $coupon_use_condition_num   = intval(isset($data['coupon_use_condition_num']) ? $data['coupon_use_condition_num'] : 0);
            $coupon_isuse  		        = intval(isset($data['coupon_isuse']) ? $data['coupon_isuse'] : 0);
            $coupon_claim_status  		= intval(isset($data['coupon_claim_status']) ? $data['coupon_claim_status'] : 0);
            //数据验证
            $Validate = validate('Coupon', 'validate');
            if( !$Validate -> scene('coupon_edit') -> check($data) ){
                $this->error($Validate -> getError());
            }else{}
            //验证时间
            if($coupon_period_etime <= $coupon_period_stime  && $coupon_period>0){
                $this->error('有效日期的截止时间必须大于开始时间');
            }else{}
            if($coupon_use_scope == 1 && empty($coupon_use_scope_info)){
                $this->error('允许使用类别不能为空');
            }elseif ($coupon_use_scope == 2 && empty($coupon_use_scope_info)){
                $this->error('允许使用品牌不能为空');
            }else{}
            if($coupon_use_condition > 0 && empty($coupon_use_condition_num)){
                $this->error('允许使用详细条件不能为空');
            }else{}
            if($coupon_attribute_num < 1 && $coupon_attribute > 0){
                $this->error('可重复使用数必须大于0');
            }else{}
            //验证并获取新增发放优惠券数量
            $coupon_sum_need = 0;
            if(isset($coupon_sum)){
                //获取已经存在的生成优惠券数量
                $have_sum = model('ErpCouponUseinfo')-> where('coupon_id',$id) ->count();
                if($have_sum <= $coupon_sum){
                    $coupon_sum_need = $coupon_sum - $have_sum;
                }else{
                    $this->error('优惠券发放数量最少不能少于'.$have_sum.'张');
                }
            }else{}
            $rel = controller('Couponlogic','logic') -> edit($id, $user_id, $coupon_name, $coupon_value, $coupon_claim_status, $coupon_type, $coupon_source, $coupon_period, $coupon_period_stime, $coupon_period_etime, $coupon_sum, $coupon_attribute, $coupon_attribute_num, $coupon_use_condition, $coupon_use_condition_num, $coupon_use_scope, $coupon_use_scope_info,$coupon_isuse,$coupon_sum_need);

            if($rel['code'] == 200){
                $this->success('编辑成功', '', '_parent_reload');
            }else{
                $this->error($rel['message']);
            }

        }

        // 使用ZBuilder快速创建表单
        $goods_info = ErpGoods::column('id,goods_name');
        $user_info = model('user_center/Member', 'model\user')  -> column('uid,nick_name');
        $info = model('ErpCoupon', 'model') -> find($id);
        if($info){
            $info['coupon_period_stime'] = date('Y-m-d H:i:s',$info['coupon_period_stime']);
            $info['coupon_period_etime'] = date('Y-m-d H:i:s',$info['coupon_period_etime']);
            $info['coupon_value_int'] = $info['coupon_value_per'] = $info['coupon_value'];
           /* $info['coupon_rule_type_zd'] = $info['coupon_rule_type_sd'] = $info['coupon_rule_type'];*/
        }

        //分类-查找
        $class_info = [];
        $class_infos = model('ErpGoodsClass', 'model') -> getClass();
        foreach($class_infos as $key => $value){
            $class_info[$value['id']] = $value['title_display'];
        }

        $trigger = [
            ['coupon_use_scope', '1', 'lei_array_id'],
            ['coupon_use_scope', '2', 'goods_array_id'],
            ['coupon_use_condition', '1', 'coupon_use_condition_num'],
            ['coupon_type', '1', 'coupon_value_int'],
            ['coupon_type', '2', 'coupon_value_per'],
            ['coupon_period', '1', 'coupon_period_stime,coupon_period_etime'],
            ['coupon_attribute', '1', 'coupon_attribute_num'],
            /*['coupon_rule', '0', 'coupon_rule_type_zd'],
            ['coupon_rule', '1', 'coupon_rule_type_sd'],*/
        ];
        return ZBuilder::make('form')
            ->setPageTitle('新增优惠券') // 设置页面标题
            ->addFormItems([ // 批量添加表单项
                ['text', 'coupon_name', '优惠券名称','必填'],
                ['number', 'coupon_sum', '发放数量', '优惠券发放数量：整数且大于0', '1', '1'],
            ])
            ->addRadio('coupon_period', '是否有效期', '有效期',config('coupon_period'))
            ->addDaterange('coupon_period_stime,coupon_period_etime', '有效日期范围', '优惠券只可在该日期范围内使用', date('Y-m-d H:i:s',time()))
            ->addRadio('coupon_type', '优惠券类型', '优惠券使用条件：限定允许使用的场景',config('coupon_type'),1)
            ->addText('coupon_value_int', '优惠券价值','优惠券价值：整数(例如：10)')
            ->addText('coupon_value_per', '优惠券价值','优惠券价值：百分比(例如：10%)')
            ->addRadio('coupon_use_scope', '使用范围', '优惠券使用范围：限定该优惠券允许使用的范围',config('coupon_use_scope'),0)
            ->addSelect('lei_array_id', '选择允许使用类别' , '类别:网站上架并销售的物品所属类别' , $class_info , $info['coupon_use_scope_info'] , 'multiple')
            ->addSelect('goods_array_id', '选择允许使用商品' , '商品：网站上架并进行销售的指定物品' , $goods_info , $info['coupon_use_scope_info'] , 'multiple')
            ->addRadio('coupon_use_condition', '使用条件', '折扣券使用条件：限定允许使用的场景', config('coupon_use_condition'),0)
            ->addText('coupon_use_condition_num', '使用详细条件')
            /*->addRadio('coupon_rule', '发放规则','优惠券发放规则：客户获取优惠券方式',config('coupon_rule'),0)
            ->addCheckbox('coupon_rule_type_zd', '自动发放规则','',config('coupon_rule_type_zd'),0)
            ->addCheckbox('coupon_rule_type_sd', '手动发放规则','',config('coupon_rule_type_sd'),0)*/
            ->addRadio('coupon_source', '来源','优惠券发放来源：客户获取优惠券来源',config('coupon_source'),1)
            ->addRadio('coupon_attribute', '使用属性','优惠券使用属性：规范客户可以领取并使用的次数',config('coupon_attribute'),0)
            ->addText('coupon_attribute_num', '可使用次数','优惠券使用次数：规范客户可以领取并使用的次数')
            ->setTrigger($trigger)
            ->addRadio('coupon_isuse', '是否可用','当优惠券不可用时不允许进行订单支付使用',['不可用','可用'],0)
            ->setFormData($info)
            ->fetch();


    }

    /**
     * 使用情况
     * @author  dou<51779987@qq.com>
     * @param string $coupon_id
     * @return mixed
     * @throws \think\Exception
     * @throws \think\exception\DbException
     */
    public function useinfo($coupon_id='')
    {
        cookie('__forward__', $_SERVER['REQUEST_URI']);
        //获取筛选
        $map = $this->getMap();
        $map['coupon_id'] = $coupon_id;
        //数据获取
        $data = input();
        //数据列表
        $data_list = model('ErpCouponUseinfo', 'model')
            -> alias('c')
            -> leftJoin('xm_uc_member u','c.coupon_user = u.uid')
            -> field(['c.*','u.nick_name'])
            -> where($map)
            -> order('coupon_code asc')
            -> paginate();

        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle('优惠券使用情况管理') // 设置页面标题
            ->setPrimaryKey('id') // 设置主键名为id
            ->setTableName('erp_coupon_useinfo') // 设置数据表名
            ->addColumns([ // 批量添加列
                // ['__INDEX__', '序号'],
                ['id', '优惠券id'],
                ['coupon_code', '优惠券编码', 'text'],
                ['nick_name', '使用人', 'link', url('user_center/index/details', ['uid' => '__coupon_user__']), '_blank', 'pop'],
                ['coupon_get_type', '领取方式', 'text','',config('coupon_get_type')],
                ['coupon_getime', '领取时间','datetime'],
                ['coupon_usetime', '使用时间','datetime'],
                ['coupon_ordercode', '使用订单编号','text'],
                /*
                ['coupon_stime', '有效开始时间','datetime'],
                ['coupon_etime', '有效截止时间','datetime'],*/
                //['coupon_use_type', '使用状态', 'text','',config('coupon_use_type')],
                ['coupon_remark', '备注','text.edit']
            ])
            ->addColumn('coupon_use_type', '使用状态', 'select', config('coupon_use_type'))
            /*
            ->setSearchArea([
                ['text', 'id', '优惠券ID'],
                ['text', 'coupon_code', '优惠券编码', 'like'],
                ['text', 'coupon_user', '优惠券领取&使用人', 'like'],
                ['daterange', 'coupon_usetime', '优惠券使用时间'],
            ])*/
            ->setRowList($data_list) // 设置表格数据
            ->fetch(); // 渲染页面
    }


    /**
     * 首页-规则
     * @author  dou<51779987@qq.com>
     * @return mixed
     */
    public function index_rule()
    {
        cookie('__forward__', $_SERVER['REQUEST_URI']);
        //获取筛选
        $map = $this->getMap();
        //数据获取
        $data = input();
        //数据列表
        $data_list = model('ErpCouponRules', 'model')
            -> alias('r')
            -> leftJoin('xm_erp_coupon c','c.id = r.coupon_id')
            -> where($map)
            -> order('r.create_time desc')
            -> field('r.*,c.coupon_name')
            -> paginate();

        $coupon_rule_type = '';
        if($data_list){
            foreach ($data_list as $key=>$value){
                if($value['coupon_rule'] == 1){
                    $coupon_rule_type = config('coupon_rule_type_sd');
                }else{
                    $coupon_rule_type = config('coupon_rule_type_zd');
                }
                $data_list[$key]['coupon_rule_type'] = $coupon_rule_type[$value['coupon_rule_type']];
            }
        }else{}
        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle('优惠券发放规则管理') // 设置页面标题
            ->setPrimaryKey('id') // 设置主键名为id
            ->setTableName('coupon_rules') // 设置数据表名
            ->addColumns([ // 批量添加列
                // ['__INDEX__', '序号'],
                ['id', '优惠券规则ID'],
                ['coupon_name', '优惠券名称', 'text'],
                ['coupon_rule', '优惠券发放规则', 'text','',config('coupon_rule')],
               /* ['coupon_rule_type', '优惠券发放规则', 'text','',config('coupon_rule')]*/
            ])
            //->addColumn('coupon_rule_sum', '领取数量','text.edit')
            ->addColumn('create_time', '创建时间', 'datetime','datetime')
            ->addColumn('coupon_rule_isuse', '是否可用', 'switch')
            ->addColumn('right_button', '操作', 'btn')
            ->setSearchArea([
                ['text', 'r.id', '优惠券ID'],
                ['select', 'r.coupon_rule', '优惠券发放规则', '=','',config('coupon_rule')]
            ])
            // ->setSearch(['id' => '优惠券ID', 'title' => '优惠券名称', 'code' => '优惠券编码']) // 设置搜索参数
            ->addTopButton('add', ['title' => '新增规则', 'href' => url('erp/coupon/add_rule')], ['area' => ['50%', '80%']]) // 添加授权按钮
            ->addRightButton('edit', ['title' => '编辑规则', 'href' => url('erp/coupon/edit_rule', ['id' => '__id__'])], ['area' => ['50%', '80%']]) // 批量添加右侧按钮
            ->setRowList($data_list) // 设置表格数据
            ->fetch(); // 渲染页面

    }


    /**
     * 添加优惠券领取规则
     * @author dou <51779987@qq.com>
     * @return mixed
     * @throws \think\Exception
     */
    public function add_rule()
    {
        // 保存数据
        if ($this->request->isPost()) {
            //数据接收
            $data = $this->request->post();
            $data['coupon_rule_type_sd'] = 0;
            $user_id                    = intval(isset($data['user_id']) ? $data['user_id'] : 1);
            $coupon_id                  = strval(isset($data['coupon_id']) ? $data['coupon_id'] : '');
            $coupon_rule  		        = intval(isset($data['coupon_rule']) ? $data['coupon_rule'] : 0);
            $coupon_rule_type_arr       = ($coupon_rule == 1) ? $data['coupon_rule_type_sd'] : $data['coupon_rule_type_zd'];
            $coupon_rule_type           = $data['coupon_rule_type'] = strval($coupon_rule_type_arr);
            $coupon_rule_sum            = intval(isset($data['coupon_rule_sum']) ? $data['coupon_rule_sum'] : 0);
            $coupon_rule_isuse  		= intval(isset($data['coupon_rule_isuse']) ? $data['coupon_rule_isuse'] : 0);
            $coupon_rule_period_num  	= intval(isset($data['coupon_rule_period_num']) ? $data['coupon_rule_period_num'] : 0);

            //数据验证
            $Validate = validate('Coupon', 'validate');
            if( !$Validate -> scene('coupon_rule_add') -> check($data) ){
                $this->error($Validate -> getError());
            }else{}

            $rel = model('ErpCouponRules', 'model') -> addData($user_id, $coupon_id, $coupon_rule,$coupon_rule_type, $coupon_rule_sum,$coupon_rule_isuse,$coupon_rule_period_num);

            if($rel['code'] == 200){
                $this->success('新增成功', '', '_parent_reload');
            }else{
                $this->error($rel['message']);
            }

        }

        // 使用ZBuilder快速创建表单
        $map = $this->getMap();
        $map = [
            'coupon_isuse' => '1'
        ];
        $data_coupon = model('ErpCoupon', 'model') -> where($map) -> order('create_time desc') -> column('id,coupon_name');
        $trigger = [
            ['coupon_rule', '0', 'coupon_rule_type_zd'],
            ['coupon_rule', '1', 'coupon_rule_type_sd'],
            /*['coupon_rule_type_zd', '1', 'coupon_rule_sum'],
            ['coupon_rule_type_sd', '1', 'coupon_rule_sum'],*/
            ['coupon_rule_period', '1', 'coupon_rule_period_num']
        ];
        return ZBuilder::make('form')
            ->setPageTitle('新增优惠券发放规则') // 设置页面标题
            ->addSelect('coupon_id', '选择优惠券' , '选择优惠券：指定规则关联使用的优惠券(该项已自动屏蔽不可用优惠券)' , $data_coupon)
            ->addRadio('coupon_rule', '发放规则','优惠券发放规则：客户获取优惠券方式',config('coupon_rule'),0)
            ->addRadio('coupon_rule_type_zd', '自动发放规则','',config('coupon_rule_type_zd'),0)/*
            ->addRadio('coupon_rule_type_sd', '手动发放规则','',config('coupon_rule_type_sd'),0)*/
            //->addText('coupon_rule_sum','请输入发放张数')
            ->addRadio('coupon_rule_period', '发放有效期规则','',config('coupon_rule_period'),0)
            ->addText('coupon_rule_period_num','请输入有效天数','有效天数为0时，默认优惠券有效期',0)
            ->setTrigger($trigger)
            ->addRadio('coupon_rule_isuse', '是否可用','当优惠券不可用时不允许进行订单支付使用',['不可用','可用'],0)
            ->fetch();
    }


    /**
     * 编辑优惠券领取规则
     * @return mixed
     * @throws \think\Exception
     */
    public function edit_rule($id=[])
    {
        // 保存数据
        if ($this->request->isPost()) {
            //数据接收
            $data = $this->request->post();
            $data['id'] = $id;
            $data['coupon_rule_type_sd'] = 0;
            $user_id                    = intval(isset($data['user_id']) ? $data['user_id'] : 1);
            $coupon_id                  = strval(isset($data['coupon_id']) ? $data['coupon_id'] : '');
            $coupon_rule  		        = intval(isset($data['coupon_rule']) ? $data['coupon_rule'] : 0);
            $coupon_rule_type_arr       = ($coupon_rule == 1) ? $data['coupon_rule_type_sd'] : $data['coupon_rule_type_zd'];
            $coupon_rule_type           = $data['coupon_rule_type'] = strval($coupon_rule_type_arr);
            $coupon_rule_sum            = intval(isset($data['coupon_rule_sum']) ? $data['coupon_rule_sum'] : 0);
            $coupon_rule_isuse  		= intval(isset($data['coupon_rule_isuse']) ? $data['coupon_rule_isuse'] : 0);
            $coupon_rule_period_num  	= intval(isset($data['coupon_rule_period_num']) ? $data['coupon_rule_period_num'] : 0);

            //数据验证
            $Validate = validate('Coupon', 'validate');
            if( !$Validate -> scene('coupon_rule_edit') -> check($data) ){
                $this->error($Validate -> getError());
            }else{}

            $rel = model('ErpCouponRules', 'model') -> editData($user_id, $id, $coupon_id, $coupon_rule,$coupon_rule_type, $coupon_rule_sum,$coupon_rule_isuse,$coupon_rule_period_num);

            if($rel['code'] == 200){
                $this->success('编辑成功', '', '_parent_reload');
            }else{
                $this->error($rel['message']);
            }

        }

        // 使用ZBuilder快速创建表单
        $map = $this->getMap();
        $map = [
            'coupon_isuse' => '1'
        ];
        $data_coupon = model('ErpCoupon', 'model') -> where($map) -> order('create_time desc') -> column('id,coupon_name');
        $info = model('ErpCouponRules', 'model') -> find($id);
        if($info){
            $info['id'] = $info['coupon_id'];
            $info['coupon_rule_type_sd'] = $info['coupon_rule_type_zd'] = $info['coupon_rule_type'];
            if($info['coupon_rule_period_num'] > 0){
                $info['coupon_rule_period'] = 1;
            }
        }
        $trigger = [
            ['coupon_rule', '0', 'coupon_rule_type_zd'],
            ['coupon_rule', '1', 'coupon_rule_type_sd'],
/*            ['coupon_rule_type_zd', '1', 'coupon_rule_sum'],
            ['coupon_rule_type_sd', '1', 'coupon_rule_sum'],*/
            ['coupon_rule_period', '1', 'coupon_rule_period_num']
        ];
        return ZBuilder::make('form')
            ->setPageTitle('编辑优惠券发放规则') // 设置页面标题
            ->addSelect('coupon_id', '选择优惠券' , '选择优惠券：指定规则关联使用的优惠券(该项已自动屏蔽不可用优惠券)' , $data_coupon)
            ->addRadio('coupon_rule', '发放规则','优惠券发放规则：客户获取优惠券方式',config('coupon_rule'),0)
            ->addRadio('coupon_rule_type_zd', '自动发放规则','',config('coupon_rule_type_zd'),0)
           /* ->addRadio('coupon_rule_type_sd', '手动发放规则','',config('coupon_rule_type_sd'),0)*/
            /*->addText('coupon_rule_sum','请输入发放张数')*/
            ->addRadio('coupon_rule_period', '发放有效期规则','',config('coupon_rule_period'),0)
            ->addText('coupon_rule_period_num','请输入有效天数','有效天数为0时，默认优惠券有效期',0)
            ->setTrigger($trigger)
            ->addRadio('coupon_rule_isuse', '是否可用','当优惠券不可用时不允许进行订单支付使用',['不可用','可用'],0)
            ->setFormData($info)
            ->fetch();
    }

}